<?php
/**
 * 多个字段作为排序条件
 * array_multisort()
 * 关联（string）键名保持不变，但数字键名会被重新索引。
 */
$data[15] = array('volume' => 67, 'edition' => 2);
$data[12] = array('volume' => 86, 'edition' => 1);
$data[8] = array('volume' => 85, 'edition' => 6);
$data[9] = array('volume' => 98, 'edition' => 2);
$data[1] = array('volume' => 86, 'edition' => 6);
$data[5] = array('volume' => 67, 'edition' => 7);

/*$data = [
    'a' => ['volume' => 60, 'edition' => 10],
    'b' => ['volume' => 78, 'edition' => 10],
    'c' => ['volume' => 86, 'edition' => 1],
    'd' => ['volume' => 20, 'edition' => 10],
    'e' => ['volume' => 90, 'edition' => 10],
    'f' => ['volume' => 65, 'edition' => 10],
    'g' => ['volume' => 86, 'edition' => 8],
];*/

// 取得列的列表
foreach ($data as $key => $row) {
    $v[$key]  = $row['volume'];
    $e[$key] = $row['edition'];
}
$keys = array_keys($data);

// 将数据根据 volume 降序排列，根据 edition 升序排列
// 把 $data 作为最后一个参数，会将$data,$v, $e都排序,先重置键名,在排序
/*array_multisort($v, SORT_DESC, $e, SORT_ASC, $data);
var_dump($v, $e, $data);*/

/*array_multisort($v, SORT_DESC, $e, SORT_ASC);
var_dump($v, $e);*/

/**
 * 我们看到 $keys 的下标和 $v 的不相同,但是排序后 $keys依然能排好序
 */
array_multisort($v, SORT_DESC, $e, SORT_ASC, $keys);
var_dump($v, $e, $keys);